package com.hspedu.tankgame2;


import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

//坦克大战的绘图区域
public class MyPanel extends JPanel implements KeyListener {

    //定义我的坦克

    Hero hero = null;
//    定义敌人的坦克，放入Vector中
    Vector<Enemy> enemyTanks = new Vector<>();
    int enemyTanksSize=3;
    public MyPanel(){//构造器
        hero = new Hero(50, 400);
        hero.setSpeed(5);
        //初始化敌人的坦克
        for (int i = 0; i < enemyTanksSize; i++) {
            enemyTanks.add(new Enemy(100*(i+1),0));
        }
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillRect(0,0,1000,750);//填充矩形
        drawTank(hero.getX(),hero.getY(),g, hero.getDirect(), 1);
//        System.out.println(enemy.getDirect());
        //遍历敌人的坦克
        for (Enemy enemyTank : enemyTanks) {
            enemyTank.setDirect(2);
            drawTank(enemyTank.getX(),enemyTank.getY(),g,enemyTank.getDirect(),0);
        }
//        drawTank(enemy.getX()+80,enemy.getY(),g,enemy.getDirect(),0);
//        drawTank(enemy.getX()+150,enemy.getY(),g,enemy.getDirect(),0);
//        drawTank(enemy.getX()+220,enemy.getY(),g,enemy.getDirect(),0);

//        g.setColor(Color.CYAN);
//        g.fillRect(intX,intY,10,60);
//        g.fillRect(intX+10,intY+10,20,40);
//        g.fillRect(intX+30,intY,10,60);
//        g.setColor(Color.BLUE);
//        g.fillOval(30,40,20,20);
//        g.drawLine(40,20,40,50);
    }


    /*
    x:坦克的左上角x坐标
    y:坦克的左上角y坐标
    g：画笔
    direct:方向
    type:坦克类型
     */
    public void drawTank(int x,int y,Graphics g,int direct,int type){
        //该局不同类型的坦克，设置不同的颜色
        switch (type){
            case 0://敌方的坦克
                g.setColor(Color.cyan);
                break;
            case 1://我的的坦克
                g.setColor(Color.yellow);
                break;
        }

        //根据坦克的方向，绘制对应形状的坦克
//        direct 表示方向 （0：向上，1，向右，2：向下，3：向左）
        switch (direct){
            case 0://向上
                g.fill3DRect(x,y,10,60,false);//坦克左边轮子
                g.fill3DRect(x+10,y+10,20,40,false);//坦克盖子
                g.fill3DRect(x+30,y,10,60,false);//坦克右边轮子
                g.fillOval(x+10,y+20,20,20);//坦克圆形盖子
                g.drawLine(x+20,y,x+20,y+30);//坦克炮筒
                break;
            case 1://向右
                g.fill3DRect(x,y,60,10,false);//坦克上边轮子
                g.fill3DRect(x+10,y+10,40,20,false);//坦克盖子
                g.fill3DRect(x,y+30,60,10,false);//坦克下边轮子
                g.fillOval(x+20,y+10,20,20);//坦克圆形盖子
                g.drawLine(x+20,y+20,x+60,y+20);//坦克炮筒
                break;
            case 2://向下
                g.fill3DRect(x,y,10,60,false);//坦克左边轮子
                g.fill3DRect(x+10,y+10,20,40,false);//坦克盖子
                g.fill3DRect(x+30,y,10,60,false);//坦克右边轮子
                g.fillOval(x+10,y+20,20,20);//坦克圆形盖子
                g.drawLine(x+20,y+60,x+20,y+30);//坦克炮筒
                break;

            case 3://向左
                g.fill3DRect(x,y,60,10,false);//坦克上边轮子
                g.fill3DRect(x+10,y+10,40,20,false);//坦克盖子
                g.fill3DRect(x,y+30,60,10,false);//坦克下边轮子
                g.fillOval(x+20,y+10,20,20);//坦克圆形盖子
                g.drawLine(x,y+20,x+30,y+20);//坦克炮筒
                break;
            default:
                System.out.println("暂时没有处理");
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode()==KeyEvent.VK_W){//向上
            hero.setDirect(0);
            hero.moveUp();
//            hero.setY(y--);
//            hero.setY(hero.getY()-1);
        }
        else if(e.getKeyCode()==KeyEvent.VK_S){//向下
            hero.setDirect(2);
            hero.moveDown();
//            hero.setY(y++);
        }
        else if(e.getKeyCode()==KeyEvent.VK_A){//向左
            hero.setDirect(3);
            hero.moveLeft();
//            hero.setX(x--);
        }
        else if(e.getKeyCode()==KeyEvent.VK_D){//向右
            hero.setDirect(1);
            hero.moveRight();
//            hero.setX(x++);
        }
        this.repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
}
